\section{JSP's}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Introdução}

\subsection{JSP's}
\begin{frame}
  \frametitle{JSP's}
  \begin{itemize}
    \item Scripts podem ser adicionados a JSP's de duas formas:
    \begin{itemize}
      \item Scriptlets
      \item JSTL Tag Libraries
    \end{itemize}
  \end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Scriptlets}
\begin{frame}
  \frametitle{Scriptlets}
  \begin{itemize}
    \item O container transforma todas as JSP's em servlets 
    \item JSP's são servlets: Os recursos de servlet podem ser utilizados em
    JSP's
    \item Esse é um método ANTIGO e MUITO SUJEITO A ERROS: evite
    \item Utilize os marcadores $<\% ~ ~ \% >$ para definir o scriptlet 
  \end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{JSTL}
\begin{frame}
  \frametitle{Java Standard Tag Library}
  \begin{itemize}
    \item JSTL é um conjunto de tag-libraries:
    \begin{itemize}
      \item c: Core: Funcionalidades básicas
      \item fmt: Formatting: Formatação de valores (números, datas, etc.)
      \item xml: XML Processing
      \item sql: SQL Statements
    \end{itemize}
    \item xml e sql raramente são utilizados
  \end{itemize}
\end{frame}

\subsection{JSTL:Core}
\begin{frame}[fragile]
  \frametitle{Core: Funcionalidades básicas}
  \begin{itemize}
    \item Funcionalidades básicas:
    \begin{itemize}
      \item Iteração (forEach)
      \item Lógica (if, choose-when-otherwise)
      \item Variávies (set)
    \end{itemize}
    \item Para importar a taglib, coloque no topo da página:
  \begin{verbatim}
<%@taglib 
    uri="http://java.sun.com/jstl/core_rt" 
    prefix="c" %>
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{c:forEach}
  \begin{itemize}
    \item Itera em uma lista. Parâmetros:
    \begin{itemize}
      \item items: Lista a ser iterada
      \item var: Nome da variável definida
    \end{itemize}
  \begin{verbatim}
Pessoas: 
<ul>
  <c:forEach var="pessoa" items="${requestScope.pessoas}">
    <li>RG:${pessoa.rg}, Nome:${pessoa.nome}</li>
  </c:forEach>
</ul>
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{c:if}
  \begin{itemize}
    \item Operador condicional. Parâmetros:
    \begin{itemize}
      \item test: condição a ser verificada
    \end{itemize}
  \begin{verbatim}
<table border="1">
  <tr><th>RG</th><th>Nome</th><th>Idade</th></tr>
  <c:forEach var="pessoa" items="${requestScope.pessoas}">
    <tr>
      <td>${pessoa.rg}</td> <td>${pessoa.nome}</td>
      <td>
        ${pessoa.idade}
        <c:if test="${pessoa.idade < 18}">(Menor)</c:if>
      </td>      
    </tr>
  </c:forEach>
</table>
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{c:choose, c:when, c:otherwise}
  \begin{itemize}
    \item Lógica quando o ``else'' é necessário:
  \begin{verbatim}
<ul>
  <c:forEach var="pessoa" items="${requestScope.pessoas}">
    <li>
    ${pessoa.nome}, ${pessoa.idade} anos:
    <c:choose>
      <c:when test="${pessoa.idade < 18}">menor</c:when>
      <c:otherwise>maior</c:otherwise>
    </c:choose>
    de idade.
    </li>
  </c:forEach>
</ul>
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{c:set}
  \begin{itemize}
    \item Cria uma variável no escopo da página
  \begin{verbatim}
...
  <c:choose>
    <c:when test="${pessoa.idade < 18}">
      <c:set var="color" value="red" />
    </c:when>
    <c:otherwise>
      <c:set var="color" value="black" />
    </c:otherwise>
  </c:choose>

  <tr>
    <td>${pessoa.nome}</td>
    <td style="color:${color};">${pessoa.idade}</td>
  </tr>
...
  \end{verbatim}
  \end{itemize}
\end{frame}

\subsection{JSTL:Formatting}
\begin{frame}[fragile]
  \frametitle{fmt: Formatação}
  \begin{itemize}
    \item Formatação de campos
    \item Para importar a taglib, coloque no topo da página:
  \begin{verbatim}
<%@taglib 
    uri="http://java.sun.com/jstl/fmt_rt" 
    prefix="fmt" %>
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{fmt:formatNumber}
  \begin{itemize}
    \item Formata um número 
  \begin{verbatim}
<fmt:formatNumber 
    value="${pessoa.salario}" 
    maxFractionDigits="2" 
    minFractionDigits="2" />
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{fmt:formatDate}
  \begin{itemize}
    \item Formata uma data 
  \begin{verbatim}
<fmt:formatDate 
    value="${pessoa.dataCadastro}" 
    pattern="dd/MM/yyyy"/>
  \end{verbatim}
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{JSTL:Formatting}
  \begin{itemize}
    \item Exercício:
      \begin{itemize}
        \item Adicione os campos $dataCadastro$ e $salario$ (do tipo $Date$ e
        $Double$) à classe pessoa. Adicione o campo salário à tela de cadastro
        e a data de criação deve ser gerada automaticamente
        \item Na tela de listagem de pessoas, imprima a data de cadastro e o
        valor do salário formatado corretamente
	  \end{itemize}
  \end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Trabalho}
\begin{frame}
  \frametitle{Primeiro trabalho: Aplicação Java Web}
  \begin{itemize}
    \item Com o conteúdo apresentado até agora já é possível compor todas as
    camadas de uma aplicação
    \item Planeje casos de uso de uma aplicação e implemente-os (e.g. mapeie as
    entidades, e crie casos de usos para listar e filtrar entidades, além dos
    cadastros e das telas de alteração e remoção)
    \item Faça uma avaliação da plataforma NetBeans (http://www.netbeans.org/)
    e verifique as diferenças entre as duas IDE's
  \end{itemize}
\end{frame}
